#include<iostream>
#include"TaskQueue.h"
class ThreadPool
{
public:
    ThreadPool(int min,int max);
    ~ThreadPool();
    
    void addTask(Task task);

    int getBusyNum();

    int getAliveNum();

private:
    static void* worker(void* arg);
    static void* manager(void* arg);
    void threadExit();
private:
    TaskQueue* taskQ;           
    pthread_t managerID;         //管理者线程ID
    pthread_t* threadIDs;        //工作者线程ID    
    
    int minNum;                  //最小线程数
    int maxNum;                  //最大线程数
    int busyNum;                 //忙的线程数
    int liveNum;                 //存活的线程数
    int exitNum;                 //需要销毁的线程数
    
    pthread_mutex_t mutexPool;   //锁住整个线程池
    pthread_cond_t notEmpty;

    bool shutdown;               //是否需要销毁线程池 ，销毁为1，不销毁为0

    static const int NUMBER=2;
};